const Service = require('egg').Service;

class GenerateQrcodeService extends Service {

  constructor(ctx) {
    super(ctx);
    this.deleteTimers = {}; // 用于存储定时器的对象
  }
  async createOrUpdate({ fuid, content, stamp }) {
    fuid = fuid.substring(0, 255);
    // 查找是否存在相同的fuid的记录
    const existingRecord = await this.app.mysql.get('qrcode_for_fuid', { fuid });
    console.log('是否存在', existingRecord);
    if (existingRecord) {
      // 如果存在，更新记录
      const updateResult = await this.app.mysql.update('qrcode_for_fuid', { content }, { where: { fuid } });
      console.log(updateResult);
      // 安排新的删除定时器（如果需要）
      this.scheduleDelete(existingRecord.id, 10 * 60 * 1000); // 10 minutes in milliseconds
      return { ...existingRecord, content }; // 返回更新后的记录
    }
    // 如果不存在，插入新记录
    await this.app.mysql.insert('qrcode_for_fuid', { fuid, content, stamp });
    const insertData = await this.app.mysql.get('qrcode_for_fuid', { fuid });
    console.log('插入的数据', insertData);
    // 如果插入成功，设置删除定时器
    if (insertData.id) {
      this.scheduleDelete(insertData.id, 10 * 60 * 1000); // 10 minutes in milliseconds
    }
    return insertData;
  }

  scheduleDelete(id, timeout) {
    // 清除之前可能存在的定时器（如果有的话）
    clearTimeout(this.deleteTimers[id]);

    // 设置新的定时器
    this.deleteTimers[id] = setTimeout(() => {
      this.app.mysql.delete('qrcode_for_fuid', { id }).catch(err => {
        // 处理删除失败的情况
        console.error('Failed to delete QR code:', err);
      });
    }, timeout);
  }
  async findByStamp(stamp) {
    const result = await this.app.mysql.get('qrcode_for_fuid', { stamp });
    return result;
  }
}

module.exports = GenerateQrcodeService;
